import os
import os
import logging
from datetime import datetime
from colorlog import ColoredFormatter  # 需安装：pip install colorlog

class LogManager:
    """日志管理器类 - 提供统一的日志处理功能"""
    _instance = None
    logger = None
    LOG_DIR = None
    LOG_PATH = None
    LOG_FILENAME = None

    @classmethod
    def get_instance(cls):
        """获取单例实例"""
        if cls._instance is None:
            cls._instance = cls()
        return cls._instance

    def __init__(self):
        """初始化日志系统"""
        if LogManager.logger is not None:
            return
            
        # Windows 日志目录：根目录下的 logs 文件夹（自动创建）
        self._setup_log_directory()
        
        # 初始化日志器
        self._init_logger()
        
        # 全局日志对象
        LogManager.logger = self.logger

    def _setup_log_directory(self):
        """设置日志目录和文件路径"""
        base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        LogManager.LOG_DIR = os.path.join(base_dir, "logs")
        LogManager.LOG_DIR = LogManager.LOG_DIR.replace("/", "\\")  # 转换为 Windows 路径分隔符
        os.makedirs(LogManager.LOG_DIR, exist_ok=True)  # 确保目录存在
        
        # 日志文件名：按日期滚动（Windows 文件名兼容）
        LogManager.LOG_FILENAME = f"gantt_system_{datetime.now().strftime('%Y%m%d')}.log"
        LogManager.LOG_PATH = os.path.join(LogManager.LOG_DIR, LogManager.LOG_FILENAME)

    def _init_logger(self):
        """初始化 Windows 日志系统：控制台彩色+文件归档"""
        # 创建日志器
        self.logger = logging.getLogger("GanttSystemLogger")
        self.logger.setLevel(logging.DEBUG)
        self.logger.handlers.clear()

        # ---------------------- 1. 控制台处理器（Windows 彩色输出） ----------------------
        console_handler = logging.StreamHandler()
        console_handler.setLevel(logging.INFO)  # 控制台仅显示 INFO+

        # Windows 控制台彩色格式（适配 cmd/PowerShell）
        console_formatter = ColoredFormatter(
            fmt="%(log_color)s[%(asctime)s] %(levelname)-5s: %(message)s",
            datefmt="%H:%M:%S",
            log_colors={
                "DEBUG": "blue",
                "INFO": "green",
                "WARNING": "yellow",
                "ERROR": "red",
                "CRITICAL": "bold_red",
            },
            secondary_log_colors={},
            style="%"
        )
        console_handler.setFormatter(console_formatter)
        self.logger.addHandler(console_handler)

        # ---------------------- 2. 文件处理器（Windows 路径归档） ----------------------
        file_handler = logging.FileHandler(LogManager.LOG_PATH, encoding="utf-8")  # Windows 中文编码
        file_handler.setLevel(logging.DEBUG)  # 文件记录所有级别

        # 文件日志格式（含模块+行号，便于调试）
        file_formatter = logging.Formatter(
            fmt="%(asctime)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s",
            datefmt="%Y-%m-%d %H:%M:%S"
        )
        file_handler.setFormatter(file_formatter)
        self.logger.addHandler(file_handler)

        # 初始化成功日志
        self.logger.debug(f"Windows 日志系统初始化完成（日志路径：{LogManager.LOG_PATH}）")

# 初始化日志管理器并获取全局日志对象
logger = LogManager.get_instance().logger
